/**
 * 巷道列表的查询参数
 *
 * @export
 * @interface IStreetletListArgs
 */
export interface IStreetletListArgs {
  /**
   * 巷道编码。支持模糊查找，使用 ? 表示单个字符，使用 * 表示任意个字符
   *
   * @type {(string | null)}
   * @memberof IStreetletListArgs
   */
  streetletCode: string | null;
}

/**
 * 巷道信息
 *
 * @export
 * @interface IStreetletListItem
 */
export interface IStreetletInfo {
  /**
   * 巷道Id
   *
   * @type {number}
   * @memberof IStreetletListItem
   */
  streetletId: number;

  /**
   * 巷道编码
   *
   * @type {string}
   * @memberof IStreetletListItem
   */
  streetletCode: string;

  /**
   * 是否自动化巷道
   *
   * @type {boolean}
   * @memberof IStreetletListItem
   */
  automated: boolean;

  /**
   * 是否双深
   *
   * @type {boolean}
   * @memberof IStreetletListItem
   */
  doubleDeep: boolean;

  /**
   * 货位总数
   *
   * @type {number}
   * @memberof IStreetletListItem
   */
  totalLocationCount: number;

  /**
   * 可用货位数
   *
   * @type {number}
   * @memberof IStreetletListItem
   */
  availableLocationCount: number;

  /**
   * 货位使用率
   *
   * @type {number}
   * @memberof IStreetletListItem
   */
  usageRate: number;

  /**
   * 货位使用数据
   *
   * @type {StreetletUsageInfo[]}
   * @memberof IStreetletListItem
   */
  usageInfos: StreetletUsageInfo[];

  /**
   * 保留货位数
   *
   * @type {number}
   * @memberof IStreetletListItem
   */
  reservedLocationCount: number;

  /**
   * 可到达的出货口
   *
   * @type {{ portId: number; portCode: string }[]}
   * @memberof IStreetletListItem
   */
  ports: { portId: number; portCode: string }[];

  /**
   * 是否离线
   *
   * @type {boolean}
   * @memberof IStreetletListItem
   */
  offline: boolean;

  /**
   * 离线备注
   *
   * @type {string}
   * @memberof IStreetletListItem
   */
  offlineComment: string;
}


/**
 * 货位使用数据
 *
 * @export
 * @interface StreetletUsageInfo
 */
export interface StreetletUsageInfo {

  /**
   * 货位存储分组
   *
   * @type {string}
   * @memberof StreetletUsageInfo
   */
  storageGroup: string;

  /**
   * 货位规格
   *
   * @type {string}
   * @memberof StreetletUsageInfo
   */
  specification: string;

  /**
   * 货位限重
   *
   * @type {number}
   * @memberof StreetletUsageInfo
   */
  weightLimit: number;

  /**
   * 货位限高
   *
   * @type {number}
   * @memberof StreetletUsageInfo
   */
  heightLimit: number;

  /**
   * 总货位数
   *
   * @type {number}
   * @memberof StreetletUsageInfo
   */
  total: number;

  /**
   * 当前可用的货位数
   *
   * @type {number}
   * @memberof StreetletUsageInfo
   */
  available: number;

  /**
   * 当前有货的货位数
   *
   * @type {number}
   * @memberof StreetletUsageInfo
   */
  loaded: number;

  /**
   * 当前已禁止入站的货位数
   *
   * @type {number}
   * @memberof StreetletUsageInfo
   */
  inboundDisabled: number;
}

/**
 * 使巷道脱机和联机的操作参数
 *
 * @export
 * @interface ITakeOfflineArgs
 */
export interface ITakeOfflineArgs {
  /**
   * 脱机或联机的操作备注。必填
   *
   * @type {string}
   * @memberof ITakeOfflineArgs
   */
  comment: string;
}

/**
 * 设置巷道可到达的出货口的操作参数
 *
 * @export
 * @interface ISetPortsArgs
 */
export interface ISetPortsArgs {
  /**
   * 出货口Id列表
   *
   * @type {number[]}
   * @memberof ISetPortsArgs
   */
  portIdList: number[];
}

/**
 * 储位列表的查询参数
 *
 * @export
 * @interface IStorageLocationListArgs
 */
export interface IStorageLocationListArgs {
  /**
   * 货位编码
   *
   * @type {(string | null)}
   * @memberof IStorageLocationListArgs
   */
  locationCode: string | null;

  /**
   * 巷道列表，可多选
   *
   * @type {(number[] | null)}
   * @memberof IStorageLocationListArgs
   */
  streetletIdList: number[] | null;

  /**
   * 货位是否有货
   *
   * @type {boolean}
   * @memberof IStorageLocationListArgs
   */
  loaded?: boolean;

  /**
   * 分组
   *
   * @type {(string | null)}
   * @memberof IStorageLocationListArgs
   */
  storageGroup: string | null;

  /**
   * 是否禁止入站
   *
   * @type {boolean}
   * @memberof IStorageLocationListArgs
   */
  inboundDisabled?: boolean;

  /**
   * 是否禁止出站
   *
   * @type {boolean}
   * @memberof IStorageLocationListArgs
   */
  outboundDisabled?: boolean;

  /**
   * 是否有入站任务
   *
   * @type {boolean}
   * @memberof IStorageLocationListArgs
   */
  hasInboundMoves?: boolean;

  /**
   * 是否有出站任务
   *
   * @type {boolean}
   * @memberof IStorageLocationListArgs
   */
  hasOutboundMoves?: boolean;
}

/**
 * 储位信息
 *
 * @export
 * @interface IStorageLocationListItem
 */
export interface IStorageLocationInfo {
  /**
   * 货位 Id
   *
   * @type {number}
   * @memberof IStorageLocationListItem
   */
  locationId: number;

  /**
   * 货位编码
   *
   * @type {string}
   * @memberof IStorageLocationListItem
   */
  locationCode: string;

  /**
   * 巷道 Id
   *
   * @type {number}
   * @memberof IStorageLocationListItem
   */
  streetletId: number;

  /**
   * 巷道编码
   *
   * @type {string}
   * @memberof IStorageLocationListItem
   */
  streetletCode: string;

  /**
   * 限重
   *
   * @type {number}
   * @memberof IStorageLocationListItem
   */
  weightLimit: number;

  /**
   * 限高
   *
   * @type {number}
   * @memberof IStorageLocationListItem
   */
  heightLimit: number;

  /**
   * 入站数
   *
   * @type {number}
   * @memberof IStorageLocationListItem
   */
  inboundCount: number;

  /**
   * 禁止入站
   *
   * @type {boolean}
   * @memberof IStorageLocationListItem
   */
  inboundDisabled: boolean;

  /**
   * 禁止入站备注
   *
   * @type {string}
   * @memberof IStorageLocationListItem
   */
  inboundDisabledComment: string;

  /**
   * 出站数
   *
   * @type {number}
   * @memberof IStorageLocationListItem
   */
  outboundCount: number;

  /**
   * 禁止出站
   *
   * @type {boolean}
   * @memberof IStorageLocationListItem
   */
  outboundDisabled: boolean;

  /**
   * 禁止出站备注
   *
   * @type {string}
   * @memberof IStorageLocationListItem
   */
  outboundDisabledComment: string;

  /**
   * 存储分组
   *
   * @type {string}
   * @memberof IStorageLocationListItem
   */
  storageGroup: string;

  /**
   * 货载数
   *
   * @type {number}
   * @memberof IStorageLocationListItem
   */
  unitloadCount: number;

}

/**
 * 关键点列表的查询参数
 *
 * @export
 * @interface IKeyPointListArgs
 */
export interface IKeyPointListArgs {
  /**
   * 位置编码
   *
   * @type {(string | null)}
   * @memberof IKeyPointListArgs
   */
  locationCode: string | null;

  /**
   * 标记
   *
   * @type {(string | null)}
   * @memberof IKeyPointListArgs
   */
  tag: string | null;

  /**
   * 是否禁止入站
   *
   * @type {(boolean | null)}
   * @memberof IKeyPointListArgs
   */
  inboundDisabled: boolean | null;

  /**
   * 是否禁止出站
   *
   * @type {(boolean | null)}
   * @memberof IKeyPointListArgs
   */
  outboundDisabled: boolean | null;

  /**
   * 是否有入站任务
   *
   * @type {(boolean | null)}
   * @memberof IKeyPointListArgs
   */
  hasInboundMoves: boolean | null;

  /**
   * 是否有出站任务
   *
   * @type {(boolean | null)}
   * @memberof IKeyPointListArgs
   */
  hasOutboundMoves: boolean | null;
}

/**
 * 关键点信息
 *
 * @export
 * @interface IKeyPointInfo
 */
export interface IKeyPointInfo {
  /**
   * 货位Id
   *
   * @type {number}
   * @memberof IKeyPointInfo
   */
  locationId: number;

  /**
   * 货位编码
   *
   * @type {string}
   * @memberof IKeyPointInfo
   */
  locationCode: string;

  /**
   * 入站任务数
   *
   * @type {number}
   * @memberof IKeyPointInfo
   */
  inboundCount: number;

  /**
   * 是否禁止入站
   *
   * @type {boolean}
   * @memberof IKeyPointInfo
   */
  inboundDisabled: boolean;

  /**
   * 禁止入站备注
   *
   * @type {string}
   * @memberof IKeyPointInfo
   */
  inboundDisabledComment: string;

  /**
   * 入站数限制
   *
   * @type {number}
   * @memberof IKeyPointInfo
   */
  inboundLimit: number;

  /**
   * 出站任务数
   *
   * @type {number}
   * @memberof IKeyPointInfo
   */
  outboundCount: number;

  /**
   * 是否禁止出站
   *
   * @type {boolean}
   * @memberof IKeyPointInfo
   */
  outboundDisabled: boolean;

  /**
   * 禁止出站备注
   *
   * @type {string}
   * @memberof IKeyPointInfo
   */
  outboundDisabledComment: string;

  /**
   * 出站数限制
   *
   * @type {number}
   * @memberof IKeyPointInfo
   */
  outboundLimit: number;

  /**
   * 标记
   *
   * @type {string}
   * @memberof IKeyPointInfo
   */
  tag: string;

  /**
   * 请求类型
   *
   * @type {(string | null)}
   * @memberof IKeyPointInfo
   */
  requestType: string | null;

  /**
   * 货载数
   *
   * @type {number}
   * @memberof IKeyPointInfo
   */
  unitloadCount: number; // 货载数
}

/**
 * 禁用或启用位置的操作参数
 *
 * @export
 * @interface IDisableLocationArgs
 */
export interface IDisableLocationArgs {

  /**
   * 要禁用或启用的位置 Id 列表
   *
   * @type {number[]}
   * @memberof IDisableLocationArgs
   */
  locationIds: number[];


  /**
   *  禁用或启用位置的操作备注，必填
   *
   * @type {string}
   * @memberof IDisableLocationArgs
   */
  comment: string;
}

/**
 * 设置存储分组的操作参数
 *
 * @export
 * @interface ISetStorageGroupArgs
 */
export interface ISetStorageGroupArgs {

  /**
   * 要设置存储分组的位置 Id 列表
   *
   * @type {number[]}
   * @memberof IDisableLocationArgs
   */
  locationIds: number[];

  /**
   * 存储分组
   *
   * @type {string}
   * @memberof ISetStorageGroupArgs
   */
  storageGroup: string;
}

/**
 * 设置货位限高的操作参数
 *
 * @export
 * @interface IHeightLimitArgs
 */
export interface ISetHeightLimitArgs {

  /**
 * 要设置限高的位置 Id 列表
 *
 * @type {number[]}
 * @memberof IDisableLocationArgs
 */
  locationIds: number[];

  /**
   * 限高
   *
   * @type {number}
   * @memberof ISetHeightLimitArgs
   */
  heightLimit: number;
}

/**
 * 设置货位限重的操作参数
 *
 * @export
 * @interface IHeightLimitArgs
 */
export interface ISetWeightLimitArgs {

  /**
 * 要设置限重的位置 Id 列表
 *
 * @type {number[]}
 * @memberof IDisableLocationArgs
 */
  locationIds: number[];

  /**
   * 限重
   *
   * @type {number}
   * @memberof ISetWeightLimitArgs
   */
  weightLimit: number;
}

/**
 *  创建和编辑关键点的操作参数
 *
 * @export
 * @interface ICreateUpdateKeyPointArgs
 */
export interface ICreateUpdateKeyPointArgs {

  /**
   * 货位编号
   *
   * @type {string}
   * @memberof ICreateUpdateKeyPointArgs
   */
  locationCode: string;

  /**
   * 请求类型
   *
   * @type {(string | null)}
   * @memberof ICreateUpdateKeyPointArgs
   */
  requestType: string | null;

  /**
   * 标记
   *
   * @type {(string | null)}
   * @memberof ICreateUpdateKeyPointArgs
   */
  tag: string | null;

  /**
   * 最大入站数，1 - 999
   *
   * @type {number}
   * @memberof ICreateUpdateKeyPointArgs
   */
  inboundLimit: number;

  /**
   * 最大出站数，1 - 999
   *
   * @type {number}
   * @memberof ICreateUpdateKeyPointArgs
   */
  outboundLimit: number;
}

/**
 * 出货口列表的查询参数
 *
 * @export
 * @interface IPortListArgs
 */
export interface IPortListArgs {

  /**
   * 出货口编码
   *
   * @type {(string | null)}
   * @memberof IPortListArgs
   */
  portCode: string | null;
}

/**
 * PortInfo
 *
 * @export
 * @interface IPortInfo
 */
export interface IPortInfo {

  /**
   * 出货口Id
   *
   * @type {number}
   * @memberof IPortInfo
   */
  portId: number;

  /**
   * 出货口编码
   *
   * @type {string}
   * @memberof IPortInfo
   */
  portCode: string;

  /**
   * 出货口的关键点1，不为 null
   *
   * @type {string}
   * @memberof IPortInfo
   */
  kP1: string;

  /**
   * 出货口的关键点2，可能为 null
   *
   * @type {string}
   * @memberof IPortInfo
   */
  kP2?: string;

  /**
   * 可到达此出货口的巷道
   *
   * @type {string[]}
   * @memberof IPortInfo
   */
  streetlets: string[];

  /**
   * CurrentUat
   *
   * @type {string}
   * @memberof IPortInfo
   */
  currentUat: string;

  /**
   * 最近一次为此出货口调度下架的时间
   *
   * @type {Date}
   * @memberof IPortInfo
   */
  checkedAt: Date;

  /**
   * 最近一次为此出货口调度下架的消息
   *
   * @type {string}
   * @memberof IPortInfo
   */
  checkMessage: string;

  /**
   * 是否离线
   *
   */
   offline: boolean;

   /**
    * 离线备注
    *
    */
   offlineComment: string;
}


/**
 * 侧视图货位数据
 */
export interface ISideViewLocation {
  /**
   * 货位Id
   */
  locationId?: number;
  /**
   * 货位编码
   */
  locationCode: string;
  /**
   * 是否有货
   */
  loaded?: boolean;

  /**
   * 货位在左侧还是右侧
   *
   * @type {('Left' | 'Right')}
   * @memberof SideViewLocation
   */
  side: 'Left' | 'Right';

  /**
   * 货架是第几深位
   */
  deep: number;
  /**
   * 所在层
   */
  level: number;
  /**
   * 所在列
   */
  column: number;
  /**
   * 是否禁止入站
   */
  inboundDisabled: boolean;
  /**
   * 禁止入站备注
   */
  inboundDisabledComment?: string;
  /**
   * 入站数
   */
  inboundCount: number;
  /**
   * 入站限制
   */
  inboundLimit: number;
  /**
   * 是否禁止出站
   */
  outboundDisabled: boolean;
  /**
   * 禁止出站备注
   */
  outboundDisabledComment?: string;
  /**
   * 出站限制
   */
  outboundLimit: number;
  /**
   * 出站数
   */
  outboundCount: number;
  /**
   * 货位规格
   */
  specification?: string;
  /**
   * 存储分组
   */
  storageGroup: string;
  /**
   * 限重
   */
  weightLimit?: number;
  /**
   * 限高
   */
  heightLimit?: number;
  /**
   * 货位是否存在
   */
  exists?: boolean;
  /**
   * 入次序1
   */
  i1?: number;
  /**
   * 出次序1
   */
  o1?: number;
  /**
   * 入次序2
   */
  i2?: number;
  /**
   * 出次序2
   */
  o2?: number;
  /**
   * 入次序3
   */
  i3?: number;
  /**
   * 出次序3
   */
  o3?: number;
  /**
   * 是否选中
   */
  selected?: bigint;
}


/**
 * 侧视图数据。
 */
export interface ISideViewData {
  /**
   * 巷道编码
   */
  streetletCode?: string;
  /**
   * 巷道是否离线
   */
  offline?: boolean;
  /**
   * 巷道的货位数，不包含 Swm.Model.Location.Exists 为 false 的货位。
   */
  locationCount?: number;
  /**
   * 巷道的可用货位数，即存在、无货、无入站任务、未禁止入站的货位
   */
  availableCount?: number;
  /**
   * 巷道的货位，包含 Swm.Model.Location.Exists 为 false 的货位。
   */
  locations: ISideViewLocation[];
  /**
   * 巷道离线的备注
   */
  offlineComment?: string;
}

/**
 * 注册货载的查询参数
 *
 * @export
 * @interface registerUnitloadsArgs
 */
export interface RegisterUnitloadsArgs {
  
  /**
   * 入库工单
   *
   * @type {string}
   * @memberof RegisterUnitloadsArgs
   */
  orderCode: String

  /**
   * 入库类型
   *
   * @type {string}
   * @memberof RegisterUnitloadsArgs
   */
  warehousingType: String

  /**
   * 入库人
   *
   * @type {string}
   * @memberof RegisterUnitloadsArgs
   */
  warehouser: String

  /**
   * 入库日期
   *
   * @type {string}
   * @memberof RegisterUnitloadsArgs
   */
  warehousingDate: Date

  /**
   * 托盘类型
   *
   * @type {string}
   * @memberof RegisterUnitloadsArgs
   */
  palletType: String

  /**
   * 目的点
   *
   * @type {string}
   * @memberof RegisterUnitloadsArgs
   */
  destination: String

  /**
   * 托盘号
   *
   * @type {string}
   * @memberof RegisterUnitloadsArgs
   */
  palletCode: String

  /**
   * 物料条码
   *
   * @type {string}
   * @memberof RegisterUnitloadsArgs
   */
  materialBarcode: String
}


/**
 * 注册货载的列表数据
 *
 * @export
 * @interface RegisterUnitloadsInfo
 */
export interface RegisterUnitloadsInfo {

  /**
   * 物料码
   *
   * @type {string}
   * @memberof RegisterUnitloadsInfo
   */
  materialcode: String

  /**
   * 物料名称
   *
   * @type {string}
   * @memberof RegisterUnitloadsInfo
   */
  materialName: String

  /**
   * 图号
   *
   * @type {string}
   * @memberof RegisterUnitloadsInfo
   */
  drawingNo: String

  /**
   * 套数
   *
   * @type {string}
   * @memberof RegisterUnitloadsInfo
   */
  numberOfSets: String

  /**
   * 数量
   *
   * @type {string}
   * @memberof RegisterUnitloadsInfo
   */
  number: String
}